package org.stone.project.cacheInterface.utils;

import cn.hutool.extra.spring.SpringUtil;
import org.stone.project.common.pojo.dto.SysDictDataMeta;
import org.stone.project.cacheInterface.service.DictCacheService;
import org.stone.project.common.pojo.constant.SysConstant;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 字典工具类
 */
public class DictCacheAdapterUtil {
    /**
     * 分隔符
     */
    public static final String SEPARATOR = ",";

    /**
     * 设置字典缓存
     *
     * @param key 参数键
     * @param dictDatas 字典数据列表
     */
    public static void setDictCache(String key, List<SysDictDataMeta> dictDatas)
    {
        SpringUtil.getBean(DictCacheService.class).setDictCache(getCacheKey(key), dictDatas);
    }

    /**
     * 获取字典缓存
     *
     * @param dictType 参数键
     * @return dictDatas 字典数据列表
     */
    public static List<SysDictDataMeta> getDictCache(String dictType)
    {
        return SpringUtil.getBean(DictCacheService.class).getDictCache(getCacheKey(dictType));
    }

    /**
     * 获取值标签配置map
     *
     * @param dictType 参数键
     * @return dictDatas 字典数据列表
     */
    public static Map<String,String> getDictValueLabelMap(String dictType)
    {
        return getDictCache(dictType).stream().collect(Collectors.toMap(ele->ele.getDictValue(),ele->ele.getDictLabel()));
    }

    /**
     * 根据字典类型和字典值获取字典标签
     *
     * @param dictType 字典类型
     * @param dictValue 字典值
     * @return 字典标签
     */
    public static SysDictDataMeta getDictLabel(String dictType, String dictValue)
    {
        return SpringUtil.getBean(DictCacheService.class).getCacheByDictTypeAndDictValue(getCacheKey(dictType),dictValue);
    }

    /**
     * 根据字典类型和字典标签获取字典值
     *
     * @param dictType 字典类型
     * @param dictLabel 字典标签
     * @return 字典值
     */
    public static SysDictDataMeta getDictValue(String dictType, String dictLabel)
    {
        return SpringUtil.getBean(DictCacheService.class).getCacheByDictTypeAndDictLabel(getCacheKey(dictType),dictLabel);
    }

    /**
     * 删除指定字典缓存
     *
     * @param key 字典键
     */
    public static void removeDictCache(String key)
    {
        SpringUtil.getBean(DictCacheService.class).deleteObject(getCacheKey(key));
    }

    /**
     * 清空字典缓存
     */
    public static void clearDictCache()
    {
        SpringUtil.getBean(DictCacheService.class).clearDictCache(SysConstant.SYS_DICT_KEY + "*");
    }

    /**
     * 设置cache key
     *
     * @param configKey 参数键
     * @return 缓存键key
     */
    private static String getCacheKey(String configKey)
    {
        return SysConstant.SYS_DICT_KEY + configKey;
    }
}
